# ### 第二题
# 请编写一个Python函数`merge_intervals`，该函数接收一个由元组组成的列表作为输入，每个元组代表一个区间，以`(开始, 结束)`的形式表示。你的任务是合并所有重叠的区间，并返回以相同形式组成的新列表，新列表中的区间应该是非重叠的，并且按照区间开始的顺序排序。
#
# 如果一个区间的结束与另一个区间的开始重叠或相等，那么这两个区间应该被合并。合并区间时，新区间的开始应该是原始区间开始的最小值，结束是原始区间结束的最大值。
#
# 请注意，输入列表可能已经部分排序，但你不能保证它完全排序。
#
# **示例输入输出如下：**
#
# 输入: `[(1, 3), (2, 6), (8, 10), (15, 18)]`
# 输出: `[(1, 6), (8, 10), (15, 18)]`
#
# 输入: `[(6, 8), (1, 9), (2, 4), (4, 7)]`
# 输出: `[(1, 9)]`
#
# **提示：**
# - 首先考虑将输入列表按照区间开始的顺序排序。
# - 遍历排序后的区间列表，逐个合并重叠的区间。
#
# 这个问题需要你理解如何处理列表和元组，以及如何根据条件合并数据。
#
#
# ```python
def merge_intervals(arrs):
    sz=len(arrs)
    min_arr=0
    for i in range(0,sz):
        if arrs[i][0]<arrs[min_arr][0]:
            min_arr=i
    merged=[arrs[min_arr]]
    for i in range(sz):
        last_end=merged[-1][1]
        cur_start=arrs[i][0]
        cur_end=arrs[i][1]
        if cur_start<last_end:
            merged[-1] = (merged[-1][0], max(last_end, cur_end))
        else:
            merged.append((cur_start, cur_end))
    return merged

arr=[(2,4),(1,3)]
print(merge_intervals(arr))









#answer:
# def merge_intervals(intervals):
#     if not intervals:
#         return []
#
#     # 按照区间的开始进行排序
#     intervals.sort(key=lambda x: x[0])
#
#     merged = [intervals[0]]
#     for current_start, current_end in intervals[1:]:
#         last_end = merged[-1][1]
#
#         # 如果当前区间的开始小于等于上一个区间的结束，则合并
#         if current_start <= last_end:
#             merged[-1] = (merged[-1][0], max(last_end, current_end))
#         else:
#             merged.append((current_start, current_end))
#
#     return merged
# arr=[(2,4),(1,3)]
# print(merge_intervals(arr))